
import config from '../config/config.js';
let baseUrl = '';

// 根据不同平台设置baseUrl
// #ifdef APP-PLUS
baseUrl = config.baseUrl;
// #endif

// #ifdef H5
// H5开发环境使用代理，生产环境使用完整URL
if (process.env.NODE_ENV === 'development') {
	baseUrl = ''; // 开发环境使用代理，不需要baseUrl
} else {
	baseUrl = config.baseUrl; // 生产环境使用完整URL
}
// #endif

// #ifdef MP-WEIXIN || MP-ALIPAY || MP-BAIDU || MP-TOUTIAO || MP-QQ
// 小程序平台使用完整URL
baseUrl = config.baseUrl;
// #endif

// 如果baseUrl为空，尝试从config获取
if (!baseUrl && config && config.baseUrl) {
	baseUrl = config.baseUrl;
}

function http(options){
	return new Promise((resolve,reject)=>{
		let headers = {};//定义请求头
		// uni.showLoading({
		//     title: '加载中'
		// });
		
		// 根据请求方法设置合适的Content-Type
		// POST请求使用application/json，GET请求使用application/x-www-form-urlencoded
		let method = options.method || 'POST';
		if (method.toUpperCase() === 'POST') {
			headers['Content-Type'] = "application/json";
		} else {
			headers['Content-Type'] = "application/x-www-form-urlencoded";
		}
		
		headers['Authorization'] = uni.getStorageSync('token') || "";
		console.log("📤 请求配置:", options);
		console.log("📋 请求头:", headers);
		
		// 处理GET请求的URL参数
		let url = options.url;
		let data = options.data || {};
		
		// 拼接baseUrl和URL
		if (baseUrl) {
			// 确保URL拼接正确
			if (baseUrl.endsWith('/') && url.startsWith('/')) {
				url = baseUrl + url.substring(1);
			} else if (!baseUrl.endsWith('/') && !url.startsWith('/') && !url.startsWith('http')) {
				url = baseUrl + '/' + url;
			} else {
				url = baseUrl + url;
			}
		}
		
		// GET请求将参数拼接到URL上
		if (method.toUpperCase() === 'GET' && data && Object.keys(data).length > 0) {
			const params = [];
			for (let key in data) {
				if (data[key] !== null && data[key] !== undefined) {
					params.push(key + '=' + encodeURIComponent(data[key]));
				}
			}
			if (params.length > 0) {
				url += (url.indexOf('?') > -1 ? '&' : '?') + params.join('&');
			}
			data = {}; // GET请求不需要body数据
		}
		
		console.log("请求URL:", url);
		
		uni.request({
			header:headers,
			url: url,
			data: data,
			method: method,
			timeout: 10000, // 设置超时时间10秒
			success(res) {
				console.log("res",res);
				// uni.hideLoading();
				// 未登录，则跳转登录
				if(res.statusCode == 401){
					uni.showToast({
						title:'登录过期，请重新登录',
						icon:"none"
					})
					uni.navigateTo({
					    url: '/pages/login/login'
					});
				}
				if(res.data && res.data.code == 401){
					uni.showToast({
						title:'登录过期，请重新登录',
						icon:"none"
					})
					uni.navigateTo({
					    url: '/pages/login/login'
					});
				}
				resolve(res)
			},
			fail(err) {
				console.log("err",err);
				// uni.hideLoading();
				// 提供更友好的错误提示
				let errorMsg = '网络请求失败';
				let showToast = true;
				
				if (err.errMsg) {
					if (err.errMsg.includes('timeout')) {
						errorMsg = '请求超时，请检查网络';
					} else if (err.errMsg.includes('fail') || err.errMsg.includes('abort')) {
						// 检查是否是连接失败
						if (err.errMsg.includes('Failed to connect') || err.errMsg.includes('connect')) {
							errorMsg = '无法连接到服务器\n请检查：\n1. 后端服务是否启动（端口9401）\n2. 网络连接是否正常\n3. 小程序需配置合法域名';
							// 小程序环境下，提示配置合法域名
							// #ifdef MP-WEIXIN
							errorMsg += '\n\n小程序需要在微信公众平台配置服务器域名：\nhttp://127.0.0.1:9401';
							// #endif
						} else {
							errorMsg = '网络请求失败，请稍后重试';
						}
					}
				}
				
				console.error("请求失败:", errorMsg, err);
				console.error("请求URL:", url);
				console.error("baseUrl:", baseUrl);
				
				// 显示错误提示
				if (showToast) {
					uni.showToast({
						title: errorMsg.split('\n')[0], // 只显示第一行
						icon: 'none',
						duration: 3000
					});
				}
				
				reject(err)
			}
		})
	})
}

export default http;